package gdf

import (
	"fmt"
	"gitee.com/liumou_site/logger"
	"io"
	"net/http"
)

// GetContentLength 获取给定URL的内容长度。
// 参数:
//
//	url - 目标资源的URL。
//	debug - 是否启用调试模式，启用时会打印调试信息。
//
// 返回值:
//
//	ContentSize - 内容大小的近似值，单位为MB。
//	ContentLength - 内容的实际长度，单位为字节。
//	err - 如果发生错误，则返回错误信息。
func GetContentLength(url string, debug bool) (ContentSize int, ContentLength int64, err error) {
	// 创建GET请求以获取URL指定的资源。
	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		logger.Error("Error creating request:", err)
		return 0, 0, err
	}

	// 获取文件大小,单位：字节
	client := &http.Client{}
	// 设置请求头，以确保请求符合预期的格式和类型。
	Req := setHeader(req)
	resp, err := client.Do(Req)
	if err != nil {
		logger.Error("Error sending request:", err)
		return 0, 0, err
	}

	// 确保在函数返回前关闭响应体。
	defer func(Body io.ReadCloser) {
		err := Body.Close()
		if err != nil {
			logger.Error("Error closing response body:", err)
		}
	}(resp.Body)

	// 获取响应头中的内容长度。
	ContentLength = resp.ContentLength
	if ContentLength == 0 {
		err = fmt.Errorf("file ContentLength is 0")
		logger.Error(err)
		return 0, 0, err
	}

	// 如果启用了调试模式，打印文件长度信息。
	if debug {
		logger.Debug("文件长度为：", ContentLength, "字节")
	}

	// 计算内容大小的近似值，单位为MB。
	ContentSize = int(ContentLength) / 1024 / 1024
	if debug {
		logger.Debug("文件大小为：", ContentSize, "MB")
	}

	// 返回计算出的文件大小和实际的内容长度。
	return ContentSize, ContentLength, nil
}
